
#pragma once
#include <iostream>
#include "Protocol.hpp"
using namespace std;

class Calculator
{
public:
  Calculator() {}
  ~Calculator() {}

  // 计算 只认结构化请求处理完返回结果
  Response Execute(const Request &req)
  {
    // 我们拿到的都是结构化数据，拿到的不就是类对象吗？
    Response resp;
    switch (req.Oper())
    {
    case '+':
      resp.SetResult(req.X() + req.Y());
      break;
    case '-':
      resp.SetResult(req.X() - req.Y());
      break;
    case '*':
      resp.SetResult(req.X() * req.Y());
      break;
    case '/':
    {
      if (req.Y() == 0) // 除0错误
      {
        resp.SetCode(1); // 除0错误码为1
      }
      else
      {
        resp.SetResult(req.X() / req.Y());
      }
    }
    break;
    case '%':
    {
      if (req.Y() == 0) // 模0错误
      {
        resp.SetCode(2); // 模0错误码为2
      }
      else
      {
        resp.SetResult(req.X() / req.Y());
      }
    }
    break;
    default:
      resp.SetCode(3); //3表示计算类型无法识别
      break;
    }
    //
    return resp;
  }
};
